import Dep from './dep'
// 定义观察者函数
export function observe(data) {
  // 如果data不存在，或者data不是对象，直接退出
  if (!data || typeof data !== 'object') {
    return
  }
  // 遍历data的key
  for (var key in data) {
    // 创建dep实例
    var dep = new Dep()
    // 回去data中key对应的value
    let val = data[key]
    // 递归data对象嵌套子对象
    observe(val)
    // 对data上的key属性，响应化处理
    Object.defineProperty(data, key, {
      enumerable: true,
      configurable: true,
      get() {
        if (Dep.target) {
          // 添加依赖
          dep.depend()
        }
        return val
      },
      set(newVal) {
        if (val === newVal) return
        val = newVal
        // 通知所有订阅者
        dep.notify()
      }
    })
  }
}